package schema

import (
	"time"
)

// Video 语音视频管理对象
type Video struct {
	ID          string    `json:"id"`                                          // 唯一标识
	Name        string    `json:"name" binding:"required"`                     // 标题
	Url         string    `json:"url" binding:"required"`                      // 播放链接
	Type        int       `json:"type" binding:"required,max=2,min=1"`         // 类型(1:公开 2:私有)
	ContentType int       `json:"content_type" binding:"required,max=2,min=1"` // 内容类型(1:语音 2:视频)
	Content     string    `json:"content" binding:"required"`
	TimeZone    int       `json:"time_zone" binding:"required,max=11,min=-11"` // 时区
	Duration    int       `json:"duration" binding:"required"`                 // 时长
	Memo        string    `json:"memo"`                                        // 简介
	Status      int       `json:"status" binding:"required,max=2,min=1"`       // 状态(1:启用 2:停用)
	Author      string    `json:"author" binding:"required"`                   // 作者
	Creator     string    `json:"creator"`                                     // 创建者
	CreatedAt   time.Time `json:"created_at"`                                  // 创建时间
	UpdatedAt   time.Time `json:"updated_at"`                                  // 更新时间
	Like        int       `json:"like"`                                        // 点赞
	Favorite    int       `json:"favorite"`                                    // 收藏
	GroupId     string    `json:"group_id" binding:"omitempty"`                //群ID，创建时，指定，则将视频推送到相关的群
	IsLike      bool      `json:"is_like" binding:"omitempty"`                 // 是否点赞
	UserInfo    *UserInfo `json:"user_info"`
}

// VideoUpdate 语音视频管理对象
type VideoUpdate struct {
	ID          string    `json:"id"`                                           // 唯一标识
	Name        string    `json:"name" binding:"omitempty"`                     // 标题
	Url         string    `json:"url" binding:"omitempty"`                      // 播放链接
	Type        int       `json:"type" binding:"omitempty,max=2,min=1"`         // 类型(1:公开 2:私有)
	ContentType int       `json:"content_type" binding:"omitempty,max=2,min=1"` // 内容类型(1:语音 2:视频)
	Content     string    `json:"content" binding:"required"`
	TimeZone    int       `json:"time_zone" binding:"omitempty,max=11,min=-11"` // 时区
	Duration    int       `json:"duration" binding:"omitempty"`                 // 时长
	Memo        string    `json:"memo"`                                         // 简介
	Status      int       `json:"status" binding:"omitempty,max=2,min=1"`       // 状态(1:启用 2:停用)
	Author      string    `json:"author" binding:"omitempty"`                   // 作者
	Creator     string    `json:"creator"`                                      // 创建者
	CreatedAt   time.Time `json:"created_at"`                                   // 创建时间
	UpdatedAt   time.Time `json:"updated_at"`                                   // 更新时间
}

func (a *VideoUpdate) ToVideo() *Video {
	return &Video{
		ID:          a.ID,
		Name:        a.Name,
		Url:         a.Url,
		Type:        a.Type,
		ContentType: a.ContentType,
		Content:     a.Content,
		TimeZone:    a.TimeZone,
		Duration:    a.Duration,
		Memo:        a.Memo,
		Status:      a.Status,
		Author:      a.Author,
		Creator:     a.Creator,
		CreatedAt:   a.CreatedAt,
		UpdatedAt:   a.UpdatedAt,
	}
}

// VideoQueryParam 查询条件
type VideoQueryParam struct {
	PaginationParam
	LikeName    string    `form:"name"`         // 标题
	Name        string    `form:"name"`         // 标题
	LikeUrl     string    `form:"url"`          // 播放链接
	Url         string    `form:"url"`          // 播放链接
	Type        int       `form:"type"`         // 类型(1:公开 2:私有)
	ContentType int       `form:"content_type"` // 内容类型(1:语音 2:视频)
	TimeZone    int       `form:"time_zone"`    // 时区
	Duration    int       `form:"duration"`     // 时长
	Status      int       `form:"status"`       // 状态(1:启用 2:停用)
	Author      string    `form:"author"`       // 作者
	Creator     string    `form:"creator"`      // 创建者
	CreatedAt   time.Time `json:"created_at"`   // 创建时间
}

// VideoQueryOptions 查询可选参数项
type VideoQueryOptions struct {
	OrderFields []*OrderField // 排序字段
}

// VideoQueryResult 查询结果
type VideoQueryResult struct {
	Data       Videos
	PageResult *PaginationResult
}

// Videos 语音视频管理列表
type Videos []*Video
